package com.sharekitchen.common;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 通用返回结果，服务端响应的数据最终都会封装成此对象。
 *
 * @param <T>
 */
@Data
//返回对象需要实现序列化接口，否则无法序列化也就无法缓存
public class R<T> implements Serializable {

    private String status; //状态编码：1成功，0失败，2服务器异常

    private String message; //错误信息或者成功信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

    //    响应/请求成功
    //    前端需要返回数据
    public static <T> R<T> ok(String message, T data) {
        R r = new R();
        r.status = MyConst.SUCCESS;
        r.message = message;
        r.data = data;
        return r;
    }

    //    响应失败/请求失败,错误情况
    public static <T> R<T> fail(String message) {
        R r = new R();
        r.message = message;
        r.status = MyConst.FAIL;
        return r;
    }

    //    服务器异常
    public static <T> R<T> error(String message) {
        R r = new R();
        r.message = message;
        r.status = MyConst.ERROR;
        return r;
    }

    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}
